HTMLify
Merge Sort for Linked List.java
Views: 1 | Author: cody
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | // Merge Sort for Linked List java solution //{ Driver Code Starts //Initial Template for Java import java.util.*; import java.lang.*; import java.io.*; class Node { int data; Node next; Node(int key) { data = key; next = null; } } class Driverclass { public static void main (String[] args) { Scanner sc= new Scanner(System.in); int t = sc.nextInt(); while(t-- > 0) { int n = sc.nextInt(); Node head = new Node(sc.nextInt()); Node tail = head; while(n-- > 1){ tail.next = new Node(sc.nextInt()); tail = tail.next; } head = new Solution().mergeSort(head); printList(head); System.out.println(); } } public static void printList(Node head) { if(head == null) return; Node temp = head; while(temp != null) { System.out.print(temp.data + " "); temp = temp.next; } } } // } Driver Code Ends //User function Template for Java /* class Node { int data; Node next; Node(int key) { this.data = key; next = null; } } */ class Solution { //Function to sort the given linked list using Merge Sort. static Node mergeSort(Node head) { // add your code here if(head.next==null){ return head; } Node m=mid(head); Node h2=m.next; m.next=null; Node t1=mergeSort(head); Node t2=mergeSort(h2); Node ans=merge(t1,t2); return ans; } static Node mid(Node h){ Node s=h; Node f=h; while(f.next!=null && f.next.next!=null){ s=s.next; f=f.next.next; } return s; } static Node merge(Node h1, Node h2){ if(h1==null){ return h2; } if(h2==null){ return h1; } Node ans=null; Node t=null; if(h1.data < h2.data){ ans=h1; t=ans; h1=h1.next; }else{ ans=h2; t=ans; h2=h2.next; } while(h1!=null && h2!=null){ if(h1.data < h2.data){ t.next=h1; t=t.next; h1=h1.next; }else{ t.next=h2; t=t.next; h2=h2.next; } } if(h1==null){ t.next=h2; } if(h2==null){ t.next=h1; } return ans; } } |